package com.atguigu.jxc.controller;

import com.atguigu.jxc.domain.ServiceVO;
import com.atguigu.jxc.domain.SuccessCode;
import com.atguigu.jxc.entity.Goods;
import com.atguigu.jxc.entity.Unit;
import com.atguigu.jxc.service.GoodsService;
import com.atguigu.jxc.vo.GoodsVo;
import com.atguigu.jxc.vo.TreeVo;
import com.github.pagehelper.PageInfo;
import org.apache.shiro.authz.annotation.Logical;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @description 商品信息Controller
 */
@RestController
public class GoodsController {

    @Autowired
    private GoodsService goodsService;

    /**
     * 库存商品列表
     * @return
     */
    @PostMapping("/goods/listInventory")
    public Map<String, Object> getGoodsList(@RequestParam("page") Integer page,
                                            @RequestParam("rows") Integer rows,
                                            GoodsVo goodsVo){
        String codeOrName = goodsVo.getCodeOrName();
        Integer goodsTypeId = goodsVo.getGoodsTypeId();
        PageInfo<Goods> goodsList = goodsService.getGoodsList(page, rows,codeOrName,goodsTypeId);
        long total = goodsList.getTotal();
        List<Goods> list = goodsList.getList();
        Map<String,Object> map = new HashMap<>();
        map.put("total",total);
        map.put("rows",list);
        return map;
    }

    /**
     * 加载商品类型树
     * @return
     */
    @PostMapping("/goodsType/loadGoodsType")
    public List<TreeVo> loadTree(){
        List<TreeVo> treeVoList = goodsService.loadTree();
        return treeVoList;
    }

    /**
     * 获取所有的商品单位
     * @return
     */
    @PostMapping("/unit/list")
    public Map<String,Object> getUnit(){
        List<Unit> list = goodsService.getUnit();
        Map map = new HashMap();
        map.put("rows",list);
        return map;
    }

    /**
     * 查询商品列表
     * @return
     */
    @PostMapping("/goods/list")
    public Map<String,Object> getGoods(@RequestParam("page") Integer page,
                                           @RequestParam("rows") Integer rows,
                                           GoodsVo goodsVo){
        String codeOrName = goodsVo.getCodeOrName();
        Integer goodsTypeId = goodsVo.getGoodsTypeId();
        PageInfo<Goods> goodsList = goodsService.getGoodsList(page, rows, codeOrName, goodsTypeId);
        Map<String,Object> map = new HashMap<>();
        map.put("total",goodsList.getTotal());
        map.put("rows",goodsList.getList());
        return map;
    }

    /**
     * 添加商品分类
     * @param goodsTypeName
     * @param pid
     * @return
     */
    @PostMapping("/goodsType/save")
    public ServiceVO savaGoodsType(String goodsTypeName,Integer pid){

        goodsService.savaGoodsType(goodsTypeName,pid);
        return new ServiceVO(SuccessCode.SUCCESS_CODE,SuccessCode.SUCCESS_MESS);
    }



















    /**
     * 分页查询商品库存信息
     * @param page 当前页
     * @param rows 每页显示条数
     * @param codeOrName 商品编码或名称
     * @param goodsTypeId 商品类别ID
     * @return
     */



    /**
     * 分页查询商品信息
     * @param page 当前页
     * @param rows 每页显示条数
     * @param goodsName 商品名称
     * @param goodsTypeId 商品类别ID
     * @return
     */


    /**
     * 生成商品编码
     * @return
     */
    @RequestMapping("/getCode")
    @RequiresPermissions(value = "商品管理")
    public ServiceVO getCode() {
        return goodsService.getCode();
    }

    /**
     * 添加或修改商品信息
     * @param goods 商品信息实体
     * @return
     */

    /**
     * 删除商品信息
     * @param goodsId 商品ID
     * @return
     */

    /**
     * 分页查询无库存商品信息
     * @param page 当前页
     * @param rows 每页显示条数
     * @param nameOrCode 商品名称或商品编码
     * @return
     */


    /**
     * 分页查询有库存商品信息
     * @param page 当前页
     * @param rows 每页显示条数
     * @param nameOrCode 商品名称或商品编码
     * @return
     */


    /**
     * 添加商品期初库存
     * @param goodsId 商品ID
     * @param inventoryQuantity 库存
     * @param purchasingPrice 成本价
     * @return
     */

    /**
     * 删除商品库存
     * @param goodsId 商品ID
     * @return
     */

    /**
     * 查询库存报警商品信息
     * @return
     */

}
